/** FCKeditor - The text editor for internet
* Copyright (C) 2003-2006 Frederico Caldeira Knabben
*
* Licensed under the terms of the GNU Lesser General Public License:
* 		http:
*
* For further information visit:
* 		http:
*
* "Support Open Source software. What about a donation today?"
*
* File Name: fckxml.js
* 	Defines the FCKXml object that is used for XML data calls
* 	and XML processing.
* 	This script is shared by almost all pages that compose the
* 	File Browser frameset.
*
* File Authors:
* 		Frederico Caldeira Knabben (fredck@fckeditor.net)
*/

var FCKXml = function()
{}

FCKXml.prototype.GetHttpRequest = function()
{ if ( window.XMLHttpRequest )
return new XMLHttpRequest() ; else if ( window.ActiveXObject )
return new ActiveXObject("MsXml2.XmlHttp") ; }

FCKXml.prototype.LoadUrl = function( urlToCall, asyncFunctionPointer )
{ var oFCKXml = this ; 
var bAsync = ( typeof(asyncFunctionPointer) == 'function' ) ; 
var oXmlHttp = this.GetHttpRequest() ; 
oXmlHttp.open( "GET", urlToCall, bAsync ) ; 
if ( bAsync )
{ oXmlHttp.onreadystatechange = function()
{ if ( oXmlHttp.readyState == 4 )
{ oFCKXml.DOMDocument = oXmlHttp.responseXML ; if ( oXmlHttp.status == 200 || oXmlHttp.status == 304 )
asyncFunctionPointer( oFCKXml ) ; else
alert( 'XML request error: ' + oXmlHttp.statusText + ' (' + oXmlHttp.status + ')' ) ; }
}
}

oXmlHttp.send( null ) ; 
if ( ! bAsync )
{ if ( oXmlHttp.status == 200 || oXmlHttp.status == 304 )
this.DOMDocument = oXmlHttp.responseXML ; else
{ alert( 'XML request error: ' + oXmlHttp.statusText + ' (' + oXmlHttp.status + ')' ) ; }
}
}

FCKXml.prototype.SelectNodes = function( xpath )
{ if ( document.all )
return this.DOMDocument.selectNodes( xpath ) ; else
{ var aNodeArray = new Array(); 
var xPathResult = this.DOMDocument.evaluate( xpath, this.DOMDocument,
this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), XPathResult.ORDERED_NODE_ITERATOR_TYPE, null) ; if ( xPathResult )
{ var oNode = xPathResult.iterateNext() ; while( oNode )
{ aNodeArray[aNodeArray.length] = oNode ; oNode = xPathResult.iterateNext(); }
}
return aNodeArray ; }
}

FCKXml.prototype.SelectSingleNode = function( xpath )
{ if ( document.all )
return this.DOMDocument.selectSingleNode( xpath ) ; else
{ var xPathResult = this.DOMDocument.evaluate( xpath, this.DOMDocument,
this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), 9, null); 
if ( xPathResult && xPathResult.singleNodeValue )
return xPathResult.singleNodeValue ; else
return null ; }
}
